package com.game.system.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.game.common.annotation.DataScope;
import com.game.common.utils.DateUtils;
import com.game.system.domain.game.AccountTemplate;
import com.game.system.domain.game.GameAccount;
import com.game.system.domain.game.GameTemplate;
import com.game.system.mapper.AccountTemplateMapper;
import com.game.system.mapper.GameAccountMapper;
import com.game.system.mapper.GameTemplateMapper;
import com.game.system.service.IGameAccountService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 游戏账号Service业务层处理
 *
 * @author Mr.Liu
 * @date 2025-03-18
 */
@Service
public class GameAccountServiceImpl extends ServiceImpl<GameAccountMapper, GameAccount> implements IGameAccountService {
    @Resource
    private GameAccountMapper gameAccountMapper;
    @Resource
    private AccountTemplateMapper accountTemplateMapper;
    @Resource
    private GameTemplateMapper gameTemplateMapper;

    /**
     * 查询游戏账号
     *
     * @param id 游戏账号主键
     * @return 游戏账号
     */
    @Override
    public GameAccount selectGameAccountById(Long id) {
        return gameAccountMapper.selectGameAccountById(id);
    }

    /**
     * 查询游戏账号列表
     *
     * @param gameAccount 游戏账号
     * @return 游戏账号
     */
    @Override
    @DataScope(userAlias = "ga")
    public List<GameAccount> selectGameAccountList(GameAccount gameAccount) {
        return gameAccountMapper.selectGameAccountList(gameAccount);
    }

    /**
     * 校验游戏账号是否唯一
     *
     * @param account 账号
     * @param gameId  游戏ID
     * @return 结果
     */
    @Override
    public boolean checkGameAccountUnique(String account, Long gameId) {
        return lambdaQuery().eq(GameAccount::getAccount, account).eq(GameAccount::getGameId, gameId).exists();
    }

    /**
     * 新增游戏账号
     *
     * @param gameAccount 游戏账号
     * @return 结果
     */
    @Override
    @Transactional
    public int insertGameAccount(GameAccount gameAccount) {
                gameAccount.setCreateTime(DateUtils.getNowDate());

        GameTemplate gameTemplate = gameTemplateMapper.selectGameTemplateByGameId(gameAccount.getGameId());
        AccountTemplate accountTemplate = new AccountTemplate();
        accountTemplate.setAccountId(gameAccount.getId());
        accountTemplate.setTemplateName("默认模板");
        accountTemplate.setTemplateConfig(gameTemplate.getTemplateConfig());
        accountTemplateMapper.insertAccountTemplate(accountTemplate);
        gameAccount.setTemplateId(accountTemplate.getId());
        gameAccountMapper.insertGameAccount(gameAccount);
        accountTemplate.setAccountId(gameAccount.getId());
        int i = accountTemplateMapper.updateAccountTemplate(accountTemplate);
        return i;
    }

    /**
     * 修改游戏账号
     *
     * @param gameAccount 游戏账号
     * @return 结果
     */
    @Override
    public int updateGameAccount(GameAccount gameAccount) {
                gameAccount.setUpdateTime(DateUtils.getNowDate());
        return gameAccountMapper.updateGameAccount(gameAccount);
    }

    /**
     * 批量删除游戏账号
     *
     * @param ids 需要删除的游戏账号主键
     * @return 结果
     */
    @Override
    public int deleteGameAccountByIds(Long[] ids) {
        return gameAccountMapper.deleteGameAccountByIds(ids);
    }

    /**
     * 删除游戏账号信息
     *
     * @param id 游戏账号主键
     * @return 结果
     */
    @Override
    public int deleteGameAccountById(Long id) {
        return gameAccountMapper.deleteGameAccountById(id);
    }

    /**
     * 获取游戏账号
     *
     * @param gameId 游戏ID
     * @param userId 用户ID
     */
    @Override
    public GameAccount selectGameAccount(Long gameId, Long userId) {
        return lambdaQuery().eq(GameAccount::getGameId, gameId).eq(GameAccount::getUserId, userId).orderByDesc(GameAccount::getUpdateTime).one();
    }
}
